/**
 * 系统操作日志服务
 * 用于在应用程序中记录用户操作和系统事件
 */

const LOG_STORAGE_KEY = 'systemLogs'

/**
 * 获取所有系统日志
 * @returns {Array} 日志数组
 */
export const getLogs = () => {
  try {
    const storedLogs = localStorage.getItem(LOG_STORAGE_KEY)
    return storedLogs ? JSON.parse(storedLogs) : []
  } catch (error) {
    console.error('获取日志数据失败:', error)
    return []
  }
}

/**
 * 保存日志到本地存储
 * @param {Array} logs 日志数组
 */
export const saveLogs = (logs) => {
  try {
    localStorage.setItem(LOG_STORAGE_KEY, JSON.stringify(logs))
    return true
  } catch (error) {
    console.error('保存日志失败:', error)
    return false
  }
}

/**
 * 添加新日志
 * @param {Object} logData 日志数据
 * @param {string} logData.type 日志类型 ('certificate', 'student', 'system')
 * @param {string} logData.action 操作内容
 * @param {string} logData.user 操作用户
 * @param {string} logData.status 操作状态 ('success', 'error')
 * @param {Object} logData.details 详细信息
 * @param {string} logData.error 错误信息
 * @returns {Object} 新创建的日志对象
 */
export const addLog = (logData) => {
  if (!logData || !logData.action) {
    console.error('日志数据不完整')
    return null
  }

  // 创建新日志
  const newLog = {
    id: `log_${Date.now()}`,
    timestamp: Date.now(),
    type: logData.type || 'system',
    user: logData.user || '管理员',
    action: logData.action,
    status: logData.status || 'success',
    ip: logData.ip || '',
    details: logData.details || null,
    error: logData.error || null
  }

  // 获取现有日志
  const currentLogs = getLogs()

  // 添加新日志到开头
  const updatedLogs = [newLog, ...currentLogs]

  // 保存日志
  saveLogs(updatedLogs)

  return newLog
}

/**
 * 清除所有日志
 * @returns {boolean} 操作是否成功
 */
export const clearLogs = () => {
  try {
    localStorage.removeItem(LOG_STORAGE_KEY)
    return true
  } catch (error) {
    console.error('清除日志失败:', error)
    return false
  }
}

/**
 * 按类型筛选日志
 * @param {string} type 日志类型
 * @returns {Array} 筛选后的日志数组
 */
export const filterLogsByType = (type) => {
  if (!type || type === 'all') {
    return getLogs()
  }

  const logs = getLogs()
  return logs.filter(log => log.type === type)
}

/**
 * 获取最近的日志
 * @param {number} limit 限制条数
 * @returns {Array} 最近的日志数组
 */
export const getRecentLogs = (limit = 10) => {
  const logs = getLogs()
  return logs.slice(0, limit)
}

/**
 * 记录证书相关操作
 * @param {string} action 操作描述
 * @param {Object} details 详细信息
 * @param {string} status 状态
 * @param {string} error 错误信息
 * @returns {Object} 新创建的日志对象
 */
export const logCertificateOperation = (action, details = null, status = 'success', error = null) => {
  return addLog({
    type: 'certificate',
    action,
    details,
    status,
    error
  })
}

/**
 * 记录学生相关操作
 * @param {string} action 操作描述
 * @param {Object} details 详细信息
 * @param {string} status 状态
 * @param {string} error 错误信息
 * @returns {Object} 新创建的日志对象
 */
export const logStudentOperation = (action, details = null, status = 'success', error = null) => {
  return addLog({
    type: 'student',
    action,
    details,
    status,
    error
  })
}

/**
 * 记录系统操作
 * @param {string} action 操作描述
 * @param {Object} details 详细信息
 * @param {string} status 状态
 * @param {string} error 错误信息
 * @returns {Object} 新创建的日志对象
 */
export const logSystemOperation = (action, details = null, status = 'success', error = null) => {
  return addLog({
    type: 'system',
    action,
    details,
    status,
    error
  })
}

export default {
  getLogs,
  addLog,
  clearLogs,
  filterLogsByType,
  getRecentLogs,
  logCertificateOperation,
  logStudentOperation,
  logSystemOperation
} 